package com.starpl.mobile.android.monthunsae.november.activity;

import org.json.JSONException;
import org.json.JSONObject;

import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.CheckBox;
import android.widget.EditText;
import android.widget.ImageButton;

import com.starpl.mobile.android.monthunsae.november.R;
import com.starpl.mobile.android.monthunsae.november.command.MonthUnsaeCommand;
import com.starpl.mobile.android.monthunsae.november.domain.UserInfo;
import com.starpl.mobile.android.platform.common.VersionUtil;
import com.starpl.mobile.android.platform.common.base.BaseActivity;
import com.starpl.mobile.android.platform.common.base.BaseApplication;
import com.starpl.mobile.android.platform.common.network.HttpHandler;


/**
 * 사용자 로그인 Activity
 * 
 * @author 우연화
 * @since 2011.03.16
 */
public class LoginActivity extends BaseActivity implements OnClickListener
{
	private EditText mEtId;
	private EditText mEtPassword;
	private CheckBox mCbAutoLogin;
	
	/*
	 * (non-Javadoc)
	 * 
	 * @see
	 * com.starpl.platform.common.base.BaseActivity#onCreate(android.os.Bundle)
	 */
	@Override
	public void onCreate(Bundle savedInstanceState)
	{
		super.onCreate(savedInstanceState);
		setContentView(R.layout.login_activity);

		mEtId = (EditText) findViewById(R.id.login_activity_et_id);
		mEtPassword = (EditText) findViewById(R.id.login_activity_et_password);
		mCbAutoLogin = (CheckBox) findViewById(R.id.login_activity_cb_autologin);
		
		ImageButton ibLogin = (ImageButton) findViewById(R.id.login_activity_ib_login);
		ImageButton ibFind = (ImageButton) findViewById(R.id.login_activity_ib_find);
		ImageButton ibJoin = (ImageButton) findViewById(R.id.login_activity_ib_join);
		ibLogin.setOnClickListener(this);
		ibFind.setOnClickListener(this);
		ibJoin.setOnClickListener(this);
	}

	/**
	 * 로그인을 한다. 
	 */
	private void login()
	{
		final String userId = mEtId.getText().toString();
		final String password = mEtPassword.getText().toString();

		if(userId.getBytes().length <= 0)
		{
			alert("아이디를 정확히 입력하세요");
		}
		else if(password.getBytes().length <= 0)
		{
			alert("비밀번호를 정확히 입력하세요");
		}
		else
		{
			// 자동 로그인 상태를 저장
			boolean isAutoLogin = mCbAutoLogin.isChecked();
			getSharedPreference().putSharedPreference("autoLogin", isAutoLogin);
			if(isAutoLogin)
			{
				// 자동로그인을 사용할 경우 아이디 / 비밀번호를 저장
				getSharedPreference().putSharedPreference("autoLoginUserId", userId);
				getSharedPreference().putSharedPreference("autoLoginUserPw", password);
			}

			// 사용자 로그인
			MonthUnsaeCommand.login(new HttpHandler(this, "로그인중입니다.")
			{
				@Override
				public void didSucceed(Object result)
				{
					JSONObject object;
					try
					{
						object = ((JSONObject) result).getJSONObject("data");

						UserInfo userInfo = new UserInfo(object);

						// 생일정보가 없는 경우(이름이 없는경우, 전화번호가 없는경우)는 신비운 정보가 없다고 판단한다.
						if(userInfo.getBirthDate() == null || userInfo.getUserName() == null
								|| userInfo.getCellPhone() == null)
						{
							// 사용자 정보를 저장
							BaseApplication.setGlobalPersistent("userInfo", userInfo);
							
							Bundle extras = new Bundle();
							extras.putBoolean("isExtra", true);
							
							// 추가정보입력 페이지로 이동
							getNewActivity().setTargetActivity(JoinExtraActivity.class).setBundle(extras).show();
						}
						// 생일정보가 있는 경우 바로 로그인을 시킨다.
						else
						{
							// 사용자 정보를 저장
							BaseApplication.setGlobalPersistent("userInfo", userInfo);

							// 홈 엑티비티로 이동
							getNewActivity().setTargetActivity(HomeActivity.class).show();

							// 현재 엑티비티를 종료
							finish();
						}
					}
					catch(JSONException e)
					{
						LOG.e(e.getMessage());
					}
				}
			}, this, userId, password);
		}
	}
	
	/**
	 * 아이디 비밀번호 찾기 웹뷰로 이동 
	 */
	private void find()
	{
		// URL 이동
		String baseUrl = "http://starpl.com";
		String url = baseUrl + "/common/mobile/user/find/id" + "?brandService=" + BaseApplication.getConfigPersistent("brandService") + "&clientVersion=" + VersionUtil.getVersion(this);
		Bundle extras = new Bundle();
		extras.putString("title", "아이디/비밀번호 찾기");
		extras.putString("url", url);
		getNewActivity().setTargetActivity(WebViewActivity.class).setBundle(extras).show();
	}
	
	/*
	 * (non-Javadoc)
	 * 
	 * @see android.view.View.OnClickListener#onClick(android.view.View)
	 */
	@Override
	public void onClick(View v)
	{
		switch(v.getId())
		{
		// 로그인 버튼 클릭시
		case R.id.login_activity_ib_login:
			login();
			break;
			
		// 아이디, 비밀번호 찾기
		case R.id.login_activity_ib_find:
			find();
			break;

		// 회원가입 버튼 클릭시
		case R.id.login_activity_ib_join:
			getNewActivity().setTargetActivity(JoinActivity.class).show();
			break;
		}
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see
	 * com.starpl.platform.common.base.BaseActivity#onCreateOptionsMenu(android
	 * .view.Menu)
	 */
	@Override
	public boolean onCreateOptionsMenu(Menu menu)
	{
		return false;
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see
	 * com.starpl.platform.common.base.BaseActivity#onOptionsItemSelected(android
	 * .view.MenuItem)
	 */
	@Override
	public boolean onOptionsItemSelected(MenuItem item)
	{
		return false;
	}
}